﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO;
using System.Linq;
using System.Text;

namespace конфигуратор
{
    public class Адрес      // адрес некорого объекта
    {
        public string Агент;          //  АгентФайлов    =СУБЪЕКТ      // для памяти (кучи) Агент отсутвует поскольку это должен быть список кучи параметр это ссылка на объект(адрес памяти)
        public string Команда;         //   ПолучитьОбъект     = ЦЕЛЬ                               // для содержания файла BinaryReader и BinaryWriter
        public Dictionary<string, object> Параметры;      // имя файла    // пареметром может быть другой адрес        ЭТО СРЕДСТВА ДОСТИЖЕНИЯ ЦЕЛИ
        public Адрес СледующийАдрес;    // следующая команда

        public object ПолучитьЗначение()        // вложенная команда
        {
            dynamic agent = СоздатьАгент();
            foreach (KeyValuePair<string, object> keyValuePair in Параметры)
            {
                if ( keyValuePair.Value.GetType() == typeof( Адрес ) )
                  Параметры[keyValuePair.Key]  = ((Адрес) keyValuePair.Value).ПолучитьЗначение(); // замена  адресов значениями, хотя есть вариант когда передать надо именно адрес
                                                                                                                                                 // адрес или парметр должен иметь указание на целевого испонителя(агента)
            }
            object объект = Выполнить(agent, Команда, Параметры, СледующийАдрес);

            return объект;
        }

        private object Выполнить ( object agent, string команда, Dictionary<string, object> параметры, Адрес следующийАдрес )
        {
            throw new NotImplementedException();
        }

        private object СоздатьАгент()
        {
            throw new NotImplementedException();
        }

        // для объекта   это



    }

    public class АгентФайлов
    {
        private FileStream _fileStream;
        public string[] СписокИменПараметров;        // справочная информация для вышестощих редакторов
        public object ПолучитьОбъект ( Dictionary<string, object> параметры, Команда команда )
        {
            _fileStream = new FileStream( ( string ) параметры["имя файла"], FileMode.OpenOrCreate, FileAccess.ReadWrite );
                команда.Средства.Add("поток",_fileStream);
                object объект = команда.ПолучитьРезультат();
            _fileStream.Close();
            return объект;
        }
        public void ЗаписатьДанные ( string[] парметры )
        { }

    }
}
